package jp.co.showbiz.common.util;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumericUtil {

    /**
     * 0(Zero)를 null로 변환한다. 주로 SQL INSERT, UPDATE에서 0을 NULL로 입력하여야 하는 경우 사용.
     * @param val
     * @return
     * @deprecated DBMgr에 addParameter(long)으로 구현되어 불필요
     */
    public static Long convertZeroToNull(long val) {
        return (0 == val ? null : new Long(val));
    }

    /**
     * 제로를 null로 변환.
     * 
     * <pre>
     * Dependencies : None
     * Side Effects : None
     * </pre>
     * @param val int값
     * @return Integer 반환값
     * @deprecated DBMgr에 addParameter(int)로 구현되어 불필요
     */
    public static Integer convertZeroToNull(int val) {
        return (0 == val ? null : new Integer(val));
    }

    /**
     * space를 제로로 변환.
     * 
     * <pre>
     * Dependencies : None
     * Side Effects : None
     * </pre>
     * @param val 문자값
     * @return long 반환값
     */
    public static long convertSpaceToZero(String val) {
        long temp = 0;

        if (null != val && !val.trim().equals("")) {
            temp = Long.parseLong(val);
        }

        return temp;
    }

    /**
     * 올림.
     * @param val float값
     * @return long 반환값
     */
    public static long ceil(float val) {
        return (long) Math.ceil(val);
    }

    /**
     * 내림.
     * @param val float값
     * @return long 반환값
     */
    public static long floor(float val) {
        return (long) Math.floor(val);
    }

    /**
     * 주어진 문자열이 숫자인지 검사한다.
     * 
     * <pre>
     * Dependencies : None
     * Side Effects : None
     * </pre>
     * @param val 문자값
     * @return boolean 반환값
     */
    public static boolean isDigit(String val) {
        if (val == null)
            return false;

        /** 숫자인지 검사하기 위한 패턴 */
        final Pattern digitPattern = Pattern.compile("(\\d+[.]{1}\\d+)|([+]?|[-]?)\\d+[.]{1}\\d+|([+]?|[-]?)\\d+");
        Matcher match = digitPattern.matcher(val);
        if (match.matches()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * double 타입의 데이타를 주어진 pattern 에 적용하여 String 으로 리턴한다. Ex) NumericUtil.stringFormat(12345.601, "#,##0")
     * 
     * <pre>
     * Dependencies : None
     * Side Effects : None
     * </pre>
     * @param number double값
     * @param pattern String값
     * @return String 문자값
     */
    public static String stringFormat(double number, String pattern) {
        DecimalFormat df = new DecimalFormat(pattern);

        return df.format(number);
    }

}
